1030E - Vasya and Good Sequences - CodeForces Solution


bitmasks dp *2000

Please click on ads to support us..

C++ Code:

#include<bits/stdc++.h>
#define maxl 300010
 
using namespace std;
 
int n;
long long ans;
long long a[maxl],b[maxl],sum[maxl];
int f[maxl][2];
 
int main()
{
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
		scanf("%lld",&a[i]),b[i]=__builtin_popcountll(a[i]);
	for(int i=1;i<=n;i++)
	{
		sum[i]=sum[i-1]+b[i];
		if(sum[i]&1)
			f[i][1]=f[i-1][1]+1,f[i][0]=f[i-1][0];
		else
			f[i][0]=f[i-1][0]+1,f[i][1]=f[i-1][1];
	}
	ans=0;
	long long mx,tmp;
	for(int i=1;i<=n;i++)
	{
		mx=0;
		for(int j=i;j<=i+63 && j<=n;j++)
		{
			mx=b[j]>mx?b[j]:mx;
			if((sum[j]-sum[i-1])%2==0 && sum[j]-sum[i-1]>=mx*2)
				ans++;
		}
		if(i+63<n)
		{
			if(sum[i-1]&1)
				ans+=f[n][1]-f[i+63][1];
			else
				ans+=f[n][0]-f[i+63][0];
		}
	}
	printf("%lld\n",ans);
}
     		 			 	 						      	  	


Comments

Submit
0 Comments
More Questions

701. Insert into a Binary Search Tree
429. N-ary Tree Level Order Traversal
739. Daily Temperatures
647. Palindromic Substrings
583. Delete Operation for Two Strings
518. Coin Change 2
516. Longest Palindromic Subsequence
468. Validate IP Address
450. Delete Node in a BST
445. Add Two Numbers II
442. Find All Duplicates in an Array
437. Path Sum III
436. Find Right Interval
435. Non-overlapping Intervals
406. Queue Reconstruction by Height
380. Insert Delete GetRandom O(1)
332. Reconstruct Itinerary
368. Largest Divisible Subset
377. Combination Sum IV
322. Coin Change
307. Range Sum Query - Mutable
287. Find the Duplicate Number
279. Perfect Squares
275. H-Index II
274. H-Index
260. Single Number III
240. Search a 2D Matrix II
238. Product of Array Except Self
229. Majority Element II
222. Count Complete Tree Nodes